package com.hsurosy.hsuchain.nft.order.infrastructure.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hsurosy.hsuchain.nft.order.domain.entity.TradeOrder;
import jakarta.validation.constraints.NotNull;
import org.apache.ibatis.annotations.Mapper;

/**
 * 订单Mapper接口
 *
 * @Author Hsu琛君珩
 * @Date 2024-10-05 17:54
 * @Description
 * @Version: v1.0.0
 */
@Mapper
public interface OrderMapper extends BaseMapper<TradeOrder> {

    /**
     * 根据订单号查询订单
     *
     * @param orderId 订单号，不能为空
     * @return 订单 {@link TradeOrder} 实例，如果没有匹配的订单则返回null
     */
    TradeOrder selectByOrderId(@NotNull String orderId);

    /**
     * 根据订单号和买家ID查询订单
     *
     * @param orderId 订单号，不能为空
     * @param buyerId 买家ID，不能为空
     * @return 订单 {@link TradeOrder} 实例，如果没有匹配的订单则返回null
     */
    TradeOrder selectByOrderIdAndBuyer(@NotNull String orderId, @NotNull String buyerId);

    /**
     * 根据幂等号查询订单
     *
     * @param identifier 幂等号，用于保证操作幂等性
     * @param buyerId 买家ID，不能为空
     * @return 订单 {@link TradeOrder} 实例，如果没有匹配的订单则返回null
     */
    TradeOrder selectByIdentifier(String identifier, String buyerId);

    /**
     * 更新订单信息
     *
     * @param entity 待更新的订单实体
     * @return 影响的行数，大于0表示更新成功
     */
    int updateByOrderId(TradeOrder entity);
}
